<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


    <button>点击1</button>
    <button>点击2</button>
    <button>点击3</button>
    <script>
        // let  arr=[1,2,3]

        // console.dir(arr)

        // call  apply  bind  共同点  都可以改变this的指向



        function fn() {
            console.log(this)
        }

        //第一种场景

        window.fn()  //一般window 被省略了 




        //第二种场景

        let obj = {
            name: 'zs',
            age: 20,
            say: function () {
                console.log(this)
            }
        }


        obj.say()     // 对象里面的函数一般叫方法  方法被调用一般指向当前调用的这个对象


        //第三种场景 
        var btns = document.querySelectorAll('button')
        for (let i = 0; i < btns.length; i++) {
            btns[i].onclick = function () {
                console.log(i)
                console.log(this)  // 当前谁触发的这个函数的事件源
            }
        }




        //this 只能调用的时候有关  不是定义的时候

        //  function fn() {
        //      console.log(this)
        //  }


        //第四种场景 自调用函数 this 指向 window 
        (function fn2() {
            alert(1)
            console.log(this)
        }

        )()


        // 第五种场景    回调函数的this 指向window 


    
        function fn3(callback) {
            alert(2)

            callback && callback()

        }

         function fn4() {
            console.log(this)
        }
        fn3(fn4)




      



        










    </script>
</body>

</html>